//1、高阶函数
//JavaScript的函数其实都指向某个变量。既然变量可以指向函数，函数的参数能接收变量，
//那么一个函数就可以接收另一个函数作为参数，这种函数就称之为高阶函数。

function myname(x,y,f){

    return f(x)+f(y);
}
console.log(myname('100',"200",Math.abs));//Marh.abs是返回绝对值//会将字符串"100"转换为int类型
console.log("高阶函数====End");
//2、Array.map()

var arr1=[1,2,3,4,5,6,7,8,9,10];

function f1 (x){
   
    return x*x;
}
console.log(arr1.map(f1));//map()里需要放的是函数
//不用Array.map()
var a=[];
for (let i = 0; i < arr1.length; i++) {
    a.push(f1(arr1[i]))   
}
console.log(a);
console.log("Array.map()====End");

//Array.reduce()

function f2(x,y){
    return x+y;
}
console.log(arr1.reduce(f2));
//探究一下reduce()
'use strict';

function product(arr) {
    function f3(x,y){
        return x*y;

    }
    return arr.reduce(f3)

}
// 测试:
if (product([1, 2, 3, 4]) === 24 && product([0, 1, 2]) === 0 && product([99, 88, 77, 66]) === 44274384) {
    console.log('测试通过!');
}
else {
    console.log('测试失败!');
}

console.log('Array.reduce()====End');

//用reduce()将数组[1,2,3]变成整数123
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x * 10 + y;
});
console.log(arr);

//用map()和reduce()将字符串转换成数值
'use strict';

function string2int(s) {
   var arr4=[];


}
string2int("23934");
// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
    if (string2int.toString().indexOf('parseInt') !== -1) {
        console.log('请勿使用parseInt()!');
    } else if (string2int.toString().indexOf('Number') !== -1) {
        console.log('请勿使用Number()!');
    } else {
        console.log('测试通过!');
    }
}
else {
    console.log('测试失败!');
}














